/**axios封装
 * 请求拦截、相应拦截、错误统一处理
 */
 import axios from "axios"; 
 import vuex from "../store/index";
 import { Message } from "element-ui";
 
 // 环境的切换
 let baseURL
 if (process.env.NODE_ENV == "development") {
   baseURL = "https://testapi.cqtiku.com/"
   axios.defaults.baseURL = baseURL;
 } else {
   baseURL = "https://api.cqtiku.com/";
   // baseURL = "https://testapi.cqtiku.com/"
   axios.defaults.baseURL = baseURL;
 }
 
 window.localStorage.setItem('baseUrl', baseURL)
 
 // 请求超时时间
 axios.defaults.timeout = 16000;
 
 // post请求头
 axios.defaults.headers.post["Content-Type"] =
   "application/x-www-form-urlencoded;charset=UTF-8";
 axios.defaults.headers['Cache-control'] = 'public'
 // 请求拦截器
 axios.interceptors.request.use(
   (config) => {
     // 每次发送请求之前判断是否存在token，如果存在，则统一在http请求的header都加上token，不用每次请求都手动添加了
     // 即使本地存在token，也有可能token是过期的，所以在响应拦截器中要对返回状态进行判断
 
     const token = window.localStorage.getItem("access_token");
 
     // console.log(token)
     token && (config.headers.Authorization = "bearer " + token);
     return config;
   },
   (error) => {
     return Promise.error(error);
   }
 );
 
 // 响应拦截器
 axios.interceptors.response.use(
   (response) => {
     if (response.status === 200) {
       return Promise.resolve(response);
     } else {
       return Promise.reject(response);
     }
   },
   // 服务器状态码不是200的情况
   (error) => {
     if (error.response.status) {
       switch (error.response.status) {
         // 401: 未登录
         // 未登录则跳转登录页面，并携带当前页面的路径
         // 在登录成功后返回当前页面，这一步需要在登录页操作。
         case 401:
           localStorage.removeItem("token");
           localStorage.removeItem("user_type");  
           console.log($nuxt);   
           $nuxt['_router'].push({ path: "/login" });
           break;
         // 403 token过期
         // 登录过期对用户进行提示
         // 清除本地token和清空vuex中token对象
         // 跳转登录页面
         case 403:
           // Toast({
           //     message: '登录过期，请重新登录',
           //     duration: 1000,
           //     forbidClick: true
           // });
           // 清除token
           localStorage.removeItem("token");
           localStorage.removeItem("user_type");
           vuex.state.pickType = "";
           vuex.state.chapterPick = "";
 
           vuex.state.knowledgePick = "";
           vuex.state.xkId = "";
           vuex.state.xkValue = "";
           vuex.state.treeClickId = "";
           vuex.state.IsMultiSelect = false;
           vuex.state.isSubjectNavBar = false;
           vuex.state.subjectNavBarName = "";
           vuex.state.msgNums = 0;
           vuex.state.baskets = [];
           vuex.state.basketsNum = 0;
           vuex.state.searchType = "1";
           vuex.state.navBarCurrentIndex = 0;
           vuex.state.searchKeywords = "";
           // store.commit('loginSuccess', null);
 
           // 跳转登录页面，并将要浏览的页面fullPath传过去，登录成功后跳转需要访问的页面
           vue.prototype.$$router.push({ path: "/login" });
           break;
         // 404请求不存在
         case 404:
           // Toast({
           //     message: '网络请求不存在',
           //     duration: 1500,
           //     forbidClick: true
           // });
           break;
         case 622:
           // Toast({
           //     message: '网络请求不存在',
           //     duration: 1500,
           //     forbidClick: true
           // });
 
           localStorage.removeItem("token");
           localStorage.removeItem("user_type");
           vuex.state.pickType = "";
           vuex.state.chapterPick = "";
 
           vuex.state.knowledgePick = "";
           vuex.state.xkId = "";
           vuex.state.xkValue = "";
           vuex.state.treeClickId = "";
           vuex.state.IsMultiSelect = false;
           vuex.state.isSubjectNavBar = false;
           vuex.state.subjectNavBarName = "";
           vuex.state.msgNums = 0;
           vuex.state.baskets = [];
           vuex.state.basketsNum = 0;
           vuex.state.searchType = "1";
           vuex.state.navBarCurrentIndex = 0;
           vuex.state.searchKeywords = "";
           vue.prototype.$$router.push({ path: "/login" });
           // Message({
           //     message: '你的账号在其他设备登录，请修改密码或重新登录！',
           //     type: 'warning'
           //   });
           break;
         // 其他错误，直接抛出错误提示
         default:
         // Toast({
         //     message: error.response.data.message,
         //     duration: 1500,
         //     forbidClick: true
         // });
       }
       return Promise.reject(error.response);
     }
   }
 );
 /**
  * get方法，对应get请求
  * @param {String} url [请求的url地址]
  * @param {Object} params [请求时携带的参数]
  */
 export function get(url, params) {
   return new Promise((resolve, reject) => {
     axios
       .get(url, {
         params: params,
       })
       .then((res) => {
         // console.log("=========")
         resolve(res.data);
       })
       .catch((err) => {
         reject(err.data);
       });
   });
 }
 /**
  * post方法，对应post请求
  * @param {String} url [请求的url地址]
  * @param {Object} params [请求时携带的参数]
  */
 export function post(url, params) {
   return new Promise((resolve, reject) => {
     // axios.post(url, QS.stringify(params))
     axios
       .post(url, params)
       .then((res) => {
         resolve(res.data);
       })
       .catch((err) => {
         reject(err.data);
       });
   });
 }0
 
 export function Delete(url, params) {
   return new Promise((resolve, reject) => {
     axios
       .delete(url, {
         params: params,
       })
       .then((res) => {
         // console.log("=========")
         resolve(res.data);
       })
       .catch((err) => {
         reject(err.data);
       });
   });
 }
 